home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 2003 June / macformat-130.iso / mac / Reviewed⁄Demos / Spearhead Demo / demota / pak2.pk3 / global / vehicles_thinkers.scr < prev   
Encoding:
Text File  |  2002-10-21  |  37.8 KB  |  1,468 lines

  1. //.
  2. //*******************************
  3. players_tank local.trigger:
  4. //    self vehiclespeed 300
  5.     self rendereffects "-shadow"
  6.     local.parent = spawn script_origin
  7.     local.parent.origin = self.origin
  8.     level.playertanktarget = spawn script_origin
  9.     level.playertanktarget.origin = (self.origin + (0 0 80))
  10.     level.playertanktarget bind local.parent
  11.     local.parent glue self
  12.  
  13.     self removeondeath 0
  14.     if (self.target)
  15.     {
  16.         self.collisionent = self.target
  17.     //    self.collisionent hide
  18.     }
  19.     local.gun = self QueryTurretSlotEntity 0
  20.     local.gun2 = self QueryTurretSlotEntity 1
  21.     if (local.gun)
  22.         local.gun nodamage
  23.     if (local.gun2)
  24.         local.gun2 nodamage
  25.  
  26.     thread player_tank_health
  27. end
  28.  
  29. player_tank_health:
  30.     level waittill prespawn
  31.  
  32.     if (getcvar(debug) != "1")
  33.     {
  34.         $player notsolid
  35.         $player nodamage
  36.         self attachdriverslot 0 $player
  37.         $player perferredweapon "88mm Tank Gun"
  38.     }
  39.  
  40.     level waittill spawn
  41.  
  42.     local.skill = getcvar (skill)
  43.     println "z:       local.skill = getcvar (skill) = " local.skill   
  44.  
  45.     if (local.skill == "2")
  46.     {
  47.         println "z:         skill = 2 health = 1000"
  48.         self.health = 1000
  49.     }
  50.     if (local.skill == "1")
  51.     {
  52.         println "z:         skill = 1 health = 3000"
  53.         self.health = 3000
  54.     }
  55.     if ( (local.skill != "1") && (local.skill != "2") )
  56.     {
  57.         println "z:         skill != 2 and skill != 1 health = 5000"
  58.         self.health = 5000
  59.     }
  60.  
  61.  
  62. //        if ( (int (getcvar developer)) )
  63. //            thread playertank_health_hud
  64.     thread playertank_pain
  65.  
  66.     self waittill death
  67.  
  68.     self LockMovement
  69.     self playsound explode_tank
  70.     level.missionfailed = 1
  71.     iprintlnbold "The T34 tank has been lost, you have failed."
  72.     //wait 3
  73.     missionfailed
  74. end
  75.  
  76. playertank_pain:
  77.     local.original_health = self.health
  78.     local.previoushealth = self.health
  79.     local.paintime = level.time
  80.  
  81.     while(isAlive self)
  82.     {
  83.         wait .1
  84.         if (self.health < local.previoushealth)
  85.         {
  86.             self playsound damage_tank
  87.             exec global/earthquake.scr .2 4 0 0
  88.  
  89.             if ( (self.health < (local.previoushealth - 150)) && (level.time > (local.paintime + 5) ) )
  90.             {
  91.                 local.paintime = level.time
  92.                 local.health_fraction = (self.health / local.original_health)
  93.                 println "z:     local.health_fraction: " local.health_fraction
  94.                 
  95.                 if (local.health_fraction >= 0.7)
  96.                 {
  97.                     $player playsound tank_hurt1
  98.                 }
  99.                 else if (local.health_fraction >= 0.4)
  100.                 {
  101.                     $player playsound tank_hurt2
  102.                 }
  103.                 else
  104.                 {
  105.                     $player playsound tank_hurt3
  106.                 }
  107.             }
  108.  
  109.             local.previoushealth = self.health
  110.         }
  111.     }
  112. end
  113.  
  114.  
  115. playertank_health_hud:
  116.     level.subtitleX = 100
  117.     level.subtitleY = 70
  118.     while ( 1)
  119.     {
  120.         locprint level.subtitleX level.subtitleY ("Health: " + self.health)
  121.         wait 1
  122.     }
  123. end
  124.  
  125.  
  126. //*****************************************
  127. PLAYER_JEEP_CONTROLLER local.trigger:
  128.     self vehicleanim remove_surfaces
  129.     self rendereffects "-shadow"
  130.     self thread speed_controls
  131.     if (self.driver != NIL)
  132.     {
  133.         self.driver rendereffects "-shadow"
  134.         self AttachDriverSlot 0 self.driver
  135.         self.driver exec global/disable_ai.scr
  136.         self.driver anim jeep_idle_drive
  137.         self.driver nodamage
  138.         self.driver notsolid
  139.         self.driver gun "none"
  140.         self.driver immune bullet
  141.         self.driver immune fast_bullet
  142.         self.driver immune explosion
  143.         self.driver immune rocket
  144.         self.driver.gren_awareness = 0
  145.         self.driver forceactivate
  146.     }
  147.     self nodamage
  148.     if (self.target)
  149.     {
  150.         self.collisionent = self.target
  151.     //    self.collisionent hide
  152.     }
  153.  
  154.     //local.trigger waittill trigger
  155.  
  156.     if (getcvar(debug) != "1")
  157.     {
  158.         local.vturretent = self queryturretslotentity 0
  159.         local.vturretent unlock
  160.         self attachturretslot 0 $player    // Attach the player to the jeep
  161.         $player perferredweapon ".30cal Machine Gun"
  162.         local.vturretent lock
  163.     }
  164.  
  165. //level waittill spawn
  166.  
  167.  
  168. //    if ( (int (getcvar developer)) )
  169. //        thread speed_tracker
  170. end
  171.  
  172.  
  173. speed_tracker:
  174.     level.subtitleX = 100
  175.     level.subtitleY = 70
  176.     while ( 1)
  177.     {
  178.         local.speed = vector_length(self.velocity)
  179.         local.message = ("speed: " + local.speed)
  180.         locprint level.subtitleX level.subtitleY local.message
  181.         wait .5
  182.     }
  183. end
  184.  
  185. speed_controls:
  186.     for ( local.i = 1; local.i <= $slowdown.size; local.i++)
  187.     {
  188.         thread slowdown local.i
  189.     }
  190.     for ( local.i = 1; local.i <= $speedup.size; local.i++)
  191.     {
  192.         thread speedup local.i
  193.     }
  194. end
  195.  
  196. speedup local.i:
  197.     while (1)
  198.     {
  199.         if ($speedup[local.i].speed != NIL)
  200.             local.speed = $speedup[local.i].speed
  201.         else 
  202.             local.speed = level.fastspeed
  203.  
  204.         println "z:      wait for trigger speedup: " local.i  " value " local.speed
  205.         $speedup[local.i] waittill trigger
  206.  
  207.         println "z:      modify drive speedup: " local.i  " value " local.speed
  208.         
  209.         self modifydrive local.speed 10 level.lookahead
  210.         if (self.driver != NIL)
  211.         {
  212.             self.driver anim jeep_drive_gearchange_up
  213.             self.driver waittill animdone
  214.             self.driver anim jeep_idle_drive
  215.         }
  216.     }
  217. end
  218.  
  219. slowdown local.i:
  220.     while (1)
  221.     {
  222.         if ($slowdown[local.i].speed != NIL)
  223.             local.speed = $slowdown[local.i].speed
  224.         else 
  225.             local.speed = level.slowspeed
  226.  
  227.         println "z:      wait for trigger slowdown: " local.i  " value " local.speed
  228.         $slowdown[local.i] waittill trigger
  229.  
  230.         println "z:      modify drive slowdown: " local.i  " value " local.speed
  231.         self modifydrive local.speed 40 level.lookahead
  232.         if (self.driver != NIL)
  233.         {
  234.             self.driver anim jeep_drive_gearchange_down
  235.             self.driver waittill animdone
  236.             self.driver anim jeep_idle_drive
  237.         }
  238.     }
  239. end
  240.  
  241. //****************************************
  242. enemy_truck_think local.hp local.passengers local.path local.trigger local.type local.guy_type local.special local.passenger_name local.driver_name:
  243.     if (local.hp == NIL)
  244.         self.health = 4000
  245.     else 
  246.         self.health = local.hp
  247.     println "truck health: " self.health
  248.     thread truck_INIT
  249.  
  250.     if ( (local.passengers != NIL) && (local.passengers != 0) )
  251.         waitthread truck_load local.passengers local.guy_type local.panzer local.passenger_name local.driver_name
  252.     if (local.path)
  253.     {
  254.         println "truck_drive thread initialized"
  255.         thread truck_drive local.path local.trigger
  256.     }
  257.  
  258.     self waittill death
  259.  
  260.     self stop
  261.     self.collisionent disconnect_paths
  262.     thread truck_killed local.type
  263. end
  264.  
  265. truck_drive local.path local.trigger:
  266.     if (local.trigger)
  267.     {
  268.         println "truck waitting for trigger before driving"
  269.         local.trigger waittill trigger
  270.     }
  271.  
  272.     local.speed = 200
  273.     local.accel = 50
  274.     local.lookahead = 256
  275.  
  276.     println "truck starting to drive"
  277.     self drive local.path local.speed local.accel 200 local.lookahead
  278.     self waitTill drive
  279.     self.drive_done = 1
  280.     self.collisionent disconnect_paths
  281.     println "truck done with waittill drive"
  282.     self stop
  283.  
  284.     wait 3
  285.     println "truck starting to unload"
  286.     thread truck_unload
  287. end
  288.  
  289. //------------------------------------------------------------------------------
  290. LoadPassengers local.passengers local.guy_type local.special local.passenger_name:
  291. //------------------------------------------------------------------------------
  292.  
  293.     self.passenger_count = local.passengers
  294.  
  295.     for (local.slot = 1; local.slot <= local.passengers; local.slot++)
  296.     {
  297.         if (local.guy_type == NIL)
  298.             local.guy_type = "models/human/german_afrika_private"
  299.         if (randomint (3) == 1) 
  300.             local.gun = "MP40"
  301.         else
  302.             local.gun = "Mauser KAR 98K"
  303.         if ( (local.special == "panzer") && (local.slot == 1) )
  304.             local.gun = "panzerschrek"
  305.         local.guy = spawn local.guy_type "gun" local.gun
  306.         local.guy.origin = self.origin
  307.         local.guy rendereffects "-shadow"
  308.         local.guy.done_unloading = 0
  309.  
  310.         // don't prone while on vehicle!
  311.         local.guy.ainoprone = 1
  312.         local.guy.ainocrouch = 1
  313.  
  314.  
  315.         self.passenger[local.slot]    = local.guy
  316.  
  317.         if ( local.passenger_name!=NIL )
  318.             local.guy.targetname = local.passenger_name
  319.  
  320.         if (level.dontdropweapons == 1)
  321.             local.guy dontdropweapons
  322.         self AttachPassengerSlot local.slot local.guy
  323.         local.guy type_attack "cover"
  324.         local.guy leash 0
  325.         //local.guy exec global/disable_ai.scr //temp
  326.         local.guy fixedleash 1
  327.         local.guy physics_off
  328.         
  329.         if ( (level.script == "maps/t2l2") && (local.slot == 2) )
  330.         {
  331.             local.guy.targetname = "t2l2_cab_diver"
  332.             $t2l2_cab_diver immune "vehicle"
  333.             $t2l2_cab_diver immune "explosion"
  334.         }
  335.         else
  336.         {
  337.             switch (local.slot)
  338.             {
  339.             case 1:
  340.                 local.guy exec global/setdeathanim.scr "death_headpistol"
  341.                 break
  342.             case 2:
  343.                 local.guy exec global/setdeathanim.scr "death_crotch"
  344.                 break
  345.             case 3:
  346.                 local.guy exec global/setdeathanim.scr "death_left"
  347.                 break
  348.             case 4:
  349.                 local.guy exec global/setdeathanim.scr "death_run"
  350.                 break
  351.             case 5:
  352.                 local.guy exec global/setdeathanim.scr "death_shoot"
  353.                 break
  354.             case 6:
  355.                 local.guy exec global/setdeathanim.scr "death_right"
  356.                 break
  357.             default:
  358.                 local.guy exec global/setdeathanim.scr "death_collapse"
  359.                 break
  360.             }
  361.         }
  362.     }
  363.  
  364.     End
  365.  
  366. //------------------------------------------------------------------------------
  367. UnloadPassengers:
  368. //------------------------------------------------------------------------------
  369.     for (local.slot = 0; local.slot <= 6; local.slot++)
  370.     {
  371.         self thread truck_passenger_unload local.slot
  372.     }
  373.  
  374.     end
  375.  
  376.  
  377. truck_load local.passengers local.guy_type local.special local.passenger_name local.driver_name:
  378.  
  379.     self waitthread LoadPassengers local.passengers local.guy_type local.special local.passenger_name
  380.  
  381.     //driving anim name = opel_driver    
  382.     local.driver = spawn local.guy_type "gun" "none"
  383.     local.driver.origin = self.origin
  384.     local.driver rendereffects "-shadow"
  385.  
  386.     if ( local.driver_name!=NIL )
  387.         local.driver.targetname = local.driver_name
  388.  
  389.     self AttachDriverSlot 0 local.driver
  390.     local.driver exec global/disable_ai.scr
  391.     local.driver anim 00A004_driversitstill
  392.     self.driver = local.driver
  393.     self.driver.driving = 1
  394.     self.driver.done_unloading = 0
  395.     local.driver exec global/setdeathanim.scr "opel_driver_death"
  396. end
  397.  
  398. truck_unload:
  399.  
  400.     self waitthread UnloadPassengers
  401.  
  402.     local.driver = self.driver
  403.  
  404.     if ( isAlive local.driver && self.driver.driving != 0)
  405.     {
  406.         wait 3
  407.         self fullstop
  408.         //self vehicleanim dooropen
  409.         self moveanim dooropen
  410.         self DetachDriverSlot 0 local.driver.origin
  411.         local.driver notsolid
  412.         local.driver physics_on
  413.         local.driver gun "walter p38"
  414.  
  415.         local.driver nodamage
  416.         local.driver anim_noclip 00A003_driverexit
  417.         local.driver waittill animdone
  418.         local.driver takedamage
  419.         local.driver solid
  420.         local.driver exec global/enable_ai.scr
  421.         local.driver exec global/setdeathanim.scr NIL
  422.         self.driver.driving = 0
  423.         self.driver.done_unloading = 1
  424.     }
  425.  
  426.     self.done_unloading = 1
  427. end
  428.  
  429. truck_passenger_unload local.slot:
  430.     local.ent = self QueryPassengerSlotEntity local.slot
  431.     if !(isAlive local.ent)
  432.         end
  433.     if (local.ent == NULL)
  434.         end
  435.     local.ent exec global/disable_ai.scr
  436.     self DetachPassengerSlot local.slot local.ent.origin
  437.     local.tag = ("passenger" + local.slot)
  438.     println "z:      local.tag: " local.tag
  439.     local.ent.origin = self gettagposition local.tag
  440.     local.ent.angles = self gettagangles local.tag
  441.     local.ent notsolid
  442.     local.ent physics_on
  443.     local.ent anim_noclip ("opel_passenger" + local.slot)
  444.     local.ent waittill animdone
  445.     local.ent solid
  446.     local.ent rendereffects "+shadow"
  447.     local.ent leash 10000
  448.     local.ent exec global/enable_ai.scr
  449.     local.ent exec global/setdeathanim.scr NIL
  450.     local.ent.done_unloading = 1
  451.     
  452.     // allow proning and crouching now...
  453.     local.ent.ainoprone = 0
  454.     local.ent.ainocrouch = 0
  455.  
  456.  
  457. end
  458.  
  459. truck_INIT:
  460.     self rendereffects "-shadow"
  461.     self takedamage
  462.     self solid
  463.     self removeondeath 0
  464.  
  465.     if (self.nolights == 1)
  466.         self vehicleanim idlenolights
  467.     else
  468.         self vehicleanim idlelights
  469.     if (self.target)
  470.     {
  471.         self.collisionent = self.target
  472.         //self.collisionent hide
  473.     }
  474. end
  475.  
  476. truck_killed local.type:
  477.  
  478.     self show
  479.  
  480.     if ( self.driver!=NIL && self.driver.driving==1 )
  481.         self.driver exec global/bullethit.scr (0 0 250) 500 0 1
  482.  
  483.     self playsound explode_truck
  484.     exec global/earthquake.scr .2 4 0 0    
  485.     local.explosion1 = spawn script_model model models/fx/fx_truck_explosion.tik
  486.     local.explosion1.origin = self gettagposition "engine1"
  487.     local.explosion1.angles = self gettagangles "engine1"
  488.     local.explosion1 anim start
  489.     local.explosion1 notsolid
  490.  
  491.     wait .4
  492.  
  493.     self playsound explode_truck
  494.     exec global/earthquake.scr .2 4 0 0    
  495.     local.explosion2 = spawn script_model model models/fx/fx_truck_explosion.tik
  496.     local.explosion2.origin = self gettagposition "engine2"
  497.     local.explosion2.angles = self gettagangles "engine2"
  498.     local.explosion2 anim start
  499.     local.explosion2 notsolid
  500.  
  501.     if($player istouching self.collisionent)
  502.     {
  503.         $player normal_damage 100
  504.     }
  505.  
  506.     if ( (level.script == "maps/t2l2") && (isAlive $t2l2_cab_diver) )
  507.     {
  508.         $t2l2_cab_diver removeimmune "explosion"
  509.         $t2l2_cab_diver waitexec global/setdeathanim.scr "22A222_DeathTruck"
  510.         $t2l2_cab_diver damage $world 10000 $world (0 0 0) (0 0 0) (0 0 0) 0 0 9 0
  511.     }
  512.  
  513.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  514.     radiusdamage self.origin 200 200
  515.  
  516. //    if (local.type == "green")
  517. //        self.damaged = thread spawn_damaged models/vehicles/opeltruckgreen_d.tik
  518. //    else
  519. //        self.damaged = thread spawn_damaged models/vehicles/opeltruck_d.tik
  520. //    self hide
  521. //    self notsolid
  522.     self.collisionent disconnect_paths
  523.  
  524.     local.name = self
  525.     local.angles = self.angles
  526.     local.origin = self.origin
  527. //    local.brushmodel = self.collisionent.brushmodel
  528. //    self remove
  529.     self hide
  530.     self notsolid
  531. //    local.collision = thread damaged_collision local.angles local.origin local.brushmodel
  532.     if (local.type == "green")
  533.         self.damaged = thread spawn_damaged_new models/vehicles/opeltruckgreen_d.tik local.angles local.origin
  534.     else
  535.         self.damaged = thread spawn_damaged_new models/vehicles/opeltruck_d.tik local.angles local.origin    
  536. //    local.collision disconnect_paths
  537.     if (self.collisionent)
  538.     {
  539.         if (self.damaged)
  540.         {
  541.             // if we have a collision entity make our destroyed truck not solid
  542.             self.damaged notsolid
  543.         }
  544.     }
  545.     
  546.     if (level.script == "maps/m1l3b.scr")
  547.     {
  548.         println "z:   in m1l3b. making truck not solid"
  549.         self.collisionent remove
  550.         self.damaged notsolid
  551.         self notsolid
  552.         while (self.done_unloading != 1)
  553.             wait 1
  554.         self.origin = (1952 376 80)
  555.     }
  556.  
  557.     wait 10
  558.     local.explosion1 remove
  559.     local.explosion2 remove
  560. end
  561.  
  562. //*****************************************
  563. enemy_bike_think:
  564.     self rendereffects "-shadow"
  565.     self solid
  566.     self.health = 100
  567.     self takedamage
  568.     self removeondeath 0 
  569.     if (self.target)
  570.     {
  571.         self.collisionent = self.target
  572.         //self.collisionent hide
  573.     }
  574.  
  575.     self waittill death
  576.  
  577.     self show
  578.     self playsound explode_bike
  579.  
  580.     self thread spawn_fx models/fx/fx_truck_explosion.tik
  581.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  582.     radiusdamage self.origin 200 200
  583.     local.damaged = thread spawn_damaged models/vehicles/bmwbike_d.tik
  584.     self remove
  585. end
  586.  
  587.  
  588. //**************************************
  589. enemy_half-trak_think:
  590.     self.mg42 = self QueryTurretSlotEntity 0 //mg42 setup
  591.     local.gun = self.mg42
  592.     if ($(self.gunner))
  593.     {
  594.         self AttachPassengerSlot 1 self.gunner //gunner positioning
  595.         self.gunner nodamage
  596.     }
  597.     self rendereffects "-shadow"
  598.     self immune bullet
  599.     self immune fast_bullet
  600.     self immune grenade
  601.     self solid
  602.     self.health = 100
  603.     self takedamage
  604.     self removeondeath 0
  605.     if (self.target)
  606.     {
  607.         self.collisionent = self.target
  608.         //self.collisionent hide
  609.     }
  610.  
  611.     self waittill death
  612.  
  613. //    self.collisionent disconnect_paths
  614.     self show
  615.     self playsound explode_tank
  616.     self stop
  617.     if (local.gun)
  618.     {
  619.         self DetachTurretSlot 0
  620.         local.gun stopfiring
  621.         local.gun remove
  622.     }
  623.     if ($(self.gunner))
  624.     {
  625.         self DetachPassengerSlot 1 self.gunner.origin
  626.         self.gunner bedead
  627.         self.gunner hide
  628.         self.gunner notsolid
  629.     }
  630.     exec global/earthquake.scr .2 4 0 0
  631.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  632.     radiusdamage self.origin 200 200
  633.     self thread spawn_fx models/fx/fx_tank_explosion.tik
  634. //    local.damaged = thread spawn_damaged models/vehicles/sdkfz_green_d.tik
  635. //    self remove
  636.  
  637.     local.name = self
  638.     local.angles = self.angles
  639.     local.origin = self.origin
  640.     local.brushmodel = self.collisionent.brushmodel
  641.     self hide
  642.     self notsolid
  643.     local.collision = thread damaged_collision local.angles local.origin local.brushmodel
  644.     local.damaged = thread spawn_damaged_new models/vehicles/sdkfz_green_d.tik local.angles local.origin
  645.     local.collision disconnect_paths
  646.  
  647.     wait .5
  648.     if (self)
  649.         self remove
  650. end
  651.  
  652. //**************************************
  653. enemy_flak_think:
  654.     self rendereffects "-shadow"
  655.     self solid
  656.     self.health = 100
  657.     self takedamage
  658.     self removeondeath 0 
  659.     if (self.target)
  660.     {
  661.         self.collisionent = self.target
  662.         //self.collisionent hide
  663.     }
  664.  
  665.     level waittill spawn
  666.  
  667.     while ( (level.playertanktarget == 0) || (level.playertanktarget == NIL) )
  668.         wait 1
  669.  
  670.     if (level.sightdistance == NIL)
  671.         level.sightdistance = 16000
  672.     self setaimtarget level.playertanktarget
  673.     thread enemy_flak_attack
  674.     local.attack_thread = parm.previousthread
  675.  
  676.     self waittill death
  677.     //self stopFiring
  678.     self setaimtarget NULL
  679.     self show
  680.     self playsound explode_flak88 
  681.     local.attack_thread delete    
  682.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  683.     radiusdamage self.origin 200 200    
  684.     self thread spawn_fx models/fx/fx_tank_explosion.tik    
  685.     local.damaged = thread spawn_damaged models/statweapons/flak88_d.tik
  686.     self remove
  687. end
  688.  
  689. enemy_flak_attack:
  690.     while (isAlive self)
  691.     {
  692.         if !(vector_within level.playertanktarget.origin self.origin level.sightdistance)
  693.         {
  694.         //    println "z:             " self " is not firing because of range"
  695.             wait 1
  696.         }
  697.         else if (!(sighttrace level.playertanktarget.origin (self.origin + (0 0 64)) 1))
  698.         {
  699.         //    println "z:             " self " is not firing because of sight trace"
  700.             wait 1
  701.         }
  702.         else
  703.         {
  704.             println "z:         " self " on target, waitting 3 secs to fire"
  705.             wait 3
  706.             self anim fire
  707.             wait 3
  708.         }
  709.     }
  710. end
  711.  
  712.  
  713.  
  714. //****************************************
  715. enemy_tank_think local.notattacking local.type:
  716.  
  717.     level waittill spawn    // <-- jsl is this really necessary???
  718.  
  719.     self.type = local.type
  720.     self rendereffects "-shadow"
  721.  
  722.     // make sure we only set health once...
  723.     if ( self.health_set==NIL || self.health_set==0 )
  724.     {
  725.         self.health_set = 1
  726.         self.start_health = (((randomint 3) + 1) * 400)
  727.         self.health = self.start_health
  728.     }
  729.     self removeondeath 0
  730.     level.tank_stunned_time = 80
  731.     println "z:          self.target " self.target 
  732.     if (self.target)
  733.     {
  734.         self.collisionent = self.target
  735.     //    self.collisionent hide
  736.     }
  737.     self.gun = self QueryTurretSlotEntity 0
  738.     self.gun2 = self QueryTurretSlotEntity 1
  739.     if (self.gun)
  740.         self.gun nodamage
  741.     if (self.gun2)
  742.         self.gun2 nodamage
  743.     if (level.sightdistance == NIL)
  744.         level.sightdistance = 16000
  745.     if (local.notattacking != 1)
  746.     {
  747.         while ( (level.playertanktarget == 0) || (level.playertanktarget == NIL) )
  748.             wait 1
  749.         self.gun setAimTarget level.playertanktarget
  750.         thread enemy_tank_attack_loop self.gun
  751.         self.attack_thread = parm.previousthread
  752.         thread tank_pain self.gun
  753.         self.pain_thread = parm.previousthread
  754.     }
  755.  
  756.     thread tank_stop_if_close
  757.  
  758.     if (self.death_thread==NULL || self.death_thread==NIL)
  759.     {
  760.         self thread TankExplodeOnDeath local.type
  761.     }
  762.  
  763. end
  764.  
  765.  
  766. /////////////////////////////////////////////////
  767.  
  768. enemy_tank_think2 local.notattacking local.type:
  769.  
  770.     level waittill spawn
  771.  
  772.     self.type = local.type
  773.     self rendereffects "-shadow"
  774.     level.tank_stunned_time = 5
  775.     if(self.start_health==0)
  776.     {
  777.         self.health_set = 1
  778.         self.start_health = (((randomint 3) + 1) * 400)
  779.         self.health = self.start_health
  780.     }
  781.     else
  782.     {
  783.         println ("health: " + self.health)
  784.     }
  785.     self removeondeath 0
  786.     println "z:          self.target " self.target 
  787.     if (self.target)
  788.     {
  789.         self.collisionent = self.target
  790.     //    self.collisionent hide
  791.     }
  792.     self.gun = self QueryTurretSlotEntity 0
  793.     self.gun2 = self QueryTurretSlotEntity 1
  794.     if (self.gun)
  795.         self.gun nodamage
  796.     if (self.gun2)
  797.         self.gun2 nodamage
  798.     if (level.sightdistance == NIL)
  799.         level.sightdistance = 16000
  800.     if (local.notattacking != 1)
  801.     {
  802.         while ( (level.playertanktarget == 0) || (level.playertanktarget == NIL) )
  803.                 wait 1
  804.  
  805.         thread enemy_tank_attack_loop self.gun
  806.         self.attack_thread = parm.previousthread
  807.         thread tank_pain self.gun
  808.         self.pain_thread = parm.previousthread
  809.     }
  810.  
  811.     thread tank_stop_if_close
  812.  
  813.     if (self.death_thread==NULL || self.death_thread==NIL)
  814.     {
  815.         self thread TankExplodeOnDeath2 local.type
  816.     }
  817.  
  818. end
  819.  
  820. //---------------------------------------------------------------------------------
  821. TankExplodeOnDeath local.type:
  822. //---------------------------------------------------------------------------------
  823.     self.death_thread    = local
  824.  
  825.     self removeondeath 0
  826.     self.type = local.type
  827.     self rendereffects "-shadow"
  828.     if ( self.health_set==NIL || self.health_set==0 )
  829.     {
  830.         self.health_set = 1
  831.         self.start_health = (((randomint 3) + 1) * 400)
  832.         self.health = self.start_health
  833.     }
  834.     self removeondeath 0
  835.  
  836.     self waittill death
  837.     println "z:         " self " is dead. self.start_health: " self.start_health
  838.     thread tank_killed
  839.  
  840. end
  841.  
  842. //---------------------------------------------------------------------------------
  843. TankExplodeOnDeath2 local.type:
  844. //---------------------------------------------------------------------------------
  845.     self.death_thread    = local
  846.  
  847.     self.type = local.type
  848.     self rendereffects "-shadow"
  849.     self removeondeath 0
  850.  
  851.     self waittill death
  852.     println "z:         " self " is dead. self.start_health: " self.start_health
  853.     thread tank_killed2
  854.  
  855. end
  856.  
  857. tank_stop_if_close:
  858.     while ( (isAlive self) && !(vector_within self.origin $player.origin 450) )
  859.     {
  860.         wait 1
  861.     //    println "z:         tank stop if close: " self " is not close"    
  862.     }
  863.     if !(isAlive self)
  864.         end
  865.     if (self.driving == 1)
  866.         self stop
  867. //        println "z:         tank stop if close: " self " is close. stopping."
  868. end
  869.  
  870. tank_killed:
  871.     self playsound explode_tank
  872.     self stop
  873.     self.driving = 0
  874.  
  875.     local.do_collision = 1
  876.     local.turretmodel = NIL
  877.     local.type = self.type
  878.  
  879.     if (self.attack_thread)
  880.         self.attack_thread delete
  881.     if (self.pain_thread)
  882.         self.pain_thread delete
  883.     println "z:          self.type: " self.type
  884.     switch (self.type)
  885.     {
  886.         case empty_turretless_tiger:
  887.             local.model = models/vehicles/tigertank_wot_d.tik
  888.             break
  889.         case panzer_desert:
  890.             local.model = models/vehicles/panzer_iv_d.tik
  891.             break
  892.         case panzer:
  893.             local.model = models/vehicles/panzer_iv_eud.tik
  894.             local.get_out = 1
  895.             local.anims[0] = panzer_exit_1
  896.             local.anims[1] = panzer_exit_2
  897.             local.anims[2] = panzer_exit_3
  898.             break
  899.         case empty_panzer_desert:
  900.             local.model = models/vehicles/Panzer_destroyed_lowpoly_base.tik
  901.             local.turretmodel = models/vehicles/Panzer_destroyed_lowpoly_cannon.tik
  902.             local.get_out = 0
  903.             break
  904.         case empty_tiger:
  905.             local.model = models/vehicles/tigertank_destroyed_base.tik
  906.             local.turretmodel = models/vehicles/tigertank_destroyed_cannon.tik
  907.             local.get_out = 0
  908. //            local.do_collision = 0
  909.             break;
  910.         case bridge_tiger:
  911.             // tiger tank that get's pushed into the bridge...
  912.             local.model = models/vehicles/tigertank_destroyed_base.tik
  913.             local.get_out = 0
  914.             local.do_collision = 0
  915.             break
  916.         case panzerwerfer:
  917.             local.model = models/vehicles/Panzerwerfer_d_base.tik
  918.             local.turretmodel = models/vehicles/Panzerwerfer_d_cannon.tik
  919.             local.get_out = 0
  920.             break;
  921.         case empty_panzer_winter:
  922.             local.model = models/vehicles/PanzerIV_w_d_base.tik
  923.             local.turretmodel = models/vehicles/PanzerIV_w_d_cannon.tik
  924.             local.get_out = 0
  925.             break;
  926.         case panzer_winter:
  927.             local.model = models/vehicles/PanzerIV_w_d_base.tik
  928.             local.turretmodel = models/vehicles/PanzerIV_w_d_cannon.tik
  929.             local.get_out = 1
  930.             local.anims[0] = panzer_exit_1
  931.             local.anims[1] = panzer_exit_2
  932.             local.anims[2] = panzer_exit_3
  933.             break;
  934.         case empty_panzer_lowpoly:
  935.             local.model = models/vehicles/panzer_destroyed_lowpoly_base.tik
  936.             local.turretmodel = models/vehicles/panzer_destroyed_lowpoly_cannon.tik
  937.             local.get_out = 0
  938. //            local.do_collision = 0
  939.             break;
  940.         case empty_t34:
  941.             local.model = models/vehicles/t34_base_d.tik
  942.             local.turretmodel = models/vehicles/t34_cannon_d.tik
  943.             local.get_out = 0
  944. //            local.do_collision = 0
  945.             break;
  946.         case bridge_panzer:
  947.             // tiger tank that get's pushed into the bridge...
  948.             local.model = models/vehicles/Panzer_destroyed_lowpoly_base.tik
  949.             local.get_out = 0
  950.             local.do_collision = 0
  951.             break
  952.         case berlin_panzer:
  953.             local.model = models/vehicles/panzer_destroyed_lowpoly_base.tik
  954.             local.turretmodel = models/vehicles/panzer_destroyed_lowpoly_cannon.tik
  955.             local.get_out = 1
  956.             local.anims[0] = tank_exit_1
  957.             local.anims[1] = tank_exit_2
  958.             local.anims[2] = tank_exit_3
  959.             local.anims[3] = tank_exit_4
  960.             break
  961.         default:
  962.             local.model = models/vehicles/tigertank_destroyed_base.tik
  963.             local.turretmodel = models/vehicles/tigertank_destroyed_cannon.tik
  964.             local.get_out = 1
  965.             local.anims[0] = tank_exit_1
  966.             local.anims[1] = tank_exit_2
  967.             local.anims[2] = tank_exit_3
  968.             local.anims[3] = tank_exit_4
  969.             break
  970.     }
  971.     local.name = self
  972.     local.angles = self.angles
  973.     local.origin = self.origin
  974.     local.brushmodel = self.collisionent.brushmodel
  975.     local.targetname = self.targetname
  976.  
  977.     //stop the smoke emitter that came from damage and start a temp emitter for the death model
  978.     
  979.     if (self.smoke)
  980.     {
  981.         self.smoke anim stop
  982.         self.smoke = NIL
  983.     }
  984.  
  985.     self anim temp_smoke
  986.     self anim temp_sizzle
  987.     
  988.     self.gun = self QueryTurretSlotEntity 0
  989.     self.gun2 = self QueryTurretSlotEntity 1
  990.  
  991.     if (self.gun)
  992.         local.turretangles = self.gun.angles
  993.  
  994.     self thread spawn_fx models/emitters/explosion_tank.tik
  995. //    wait 0.25  jsl--> these waits cause the t34 tank to disappear briefly...
  996.     waitframe
  997.     exec global/earthquake.scr .2 4 0 0
  998.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  999.     radiusdamage (self.origin + (0 0 200)) 800 400
  1000.     waitframe
  1001. //    wait .1   //wait for explosion fx to cover up the model swap  (jsl--> these waits cause the t34 tank to disappear briefly so I removed them...)
  1002.     if (self.gun)
  1003.     {
  1004.         self DetachTurretSlot 0
  1005.         self.gun remove
  1006.     }
  1007.     if (self.gun2)
  1008.     {
  1009.         self DetachTurretSlot 1
  1010.         self.gun2 remove
  1011.     }
  1012.  
  1013.     self remove
  1014.  
  1015.     if ( local.do_collision==1 )
  1016.     {
  1017.         local.collision = thread damaged_collision local.angles local.origin local.brushmodel
  1018.     }
  1019.     
  1020.     local.damaged = thread spawn_damaged_new local.model local.angles local.origin
  1021.     local.damaged.targetname = local.targetname
  1022.  
  1023.     local.damaged.smoke    = local.smoke
  1024.  
  1025.     //produce temporary smoke and burning sound
  1026.     local.damaged anim temp_smoke
  1027.     local.damaged anim temp_sizzle
  1028.  
  1029.     if ( local.collision != NIL )
  1030.     {
  1031.         local.damaged notsolid
  1032.         local.collision disconnect_paths
  1033.     }
  1034.  
  1035.     if ( local.turretmodel != NIL )
  1036.     {
  1037.         local.turretname = local.targetname + "_damaged_turret"
  1038.         local.damaged attachmodel local.turretmodel "turret0" 1 local.turretname
  1039.         local.turretname detach
  1040.         local.turretname.angles = local.turretangles
  1041.         if (local.get_out == 1)
  1042.             local.turretname thread tank_guys_get_out local.anims local.name local.type local.angles
  1043.     }
  1044.     else
  1045.     {
  1046.         if (local.get_out == 1)
  1047.             local.damaged thread tank_guys_get_out local.anims local.name local.type local.angles local.turretname
  1048.     }
  1049. end
  1050.  
  1051.  
  1052.  
  1053. // please do not change this thread
  1054. tank_killed2:
  1055.     self playsound explode_tank
  1056.     self stop
  1057.     self.driving = 0
  1058.  
  1059.     local.do_collision = 1
  1060.     local.turretmodel = NIL
  1061.  
  1062.     if (self.attack_thread)
  1063.         self.attack_thread delete
  1064.     if (self.pain_thread)
  1065.         self.pain_thread delete
  1066.     println "z:          self.type: " self.type
  1067.     switch (self.type)
  1068.     {
  1069.         case empty_turretless_tiger:
  1070.             local.model = models/vehicles/tigertank_wot_d.tik
  1071.             break
  1072.         case panzer_desert:
  1073.             local.model = models/vehicles/panzer_iv_d.tik
  1074.             break
  1075.         case panzer:
  1076.             local.model = models/vehicles/panzer_iv_eud.tik
  1077.         // please do not change this thread
  1078.         //    local.get_out = 1
  1079.             local.anims[0] = panzer_exit_1
  1080.             local.anims[1] = panzer_exit_2
  1081.             local.anims[2] = panzer_exit_3
  1082.             break
  1083.         case empty_panzer_desert:
  1084.             local.model = models/vehicles/Panzer_destroyed_lowpoly_base.tik
  1085.             local.turretmodel = models/vehicles/Panzer_destroyed_lowpoly_cannon.tik
  1086.             local.get_out = 0
  1087.             break
  1088.         case empty_tiger:
  1089.             local.model = models/vehicles/tigertank_destroyed_base.tik
  1090.             local.turretmodel = models/vehicles/tigertank_destroyed_cannon.tik
  1091.             local.get_out = 0
  1092. //            local.do_collision = 0
  1093.             break;
  1094.         case bridge_tiger:
  1095.             // tiger tank that get's pushed into the bridge...
  1096.             local.model = models/vehicles/tigertank_destroyed_base.tik
  1097.             local.get_out = 0
  1098.             local.do_collision = 0
  1099.             break
  1100.         case bridge_panzer:
  1101.             // tiger tank that get's pushed into the bridge...
  1102.             local.model = models/vehicles/Panzer_destroyed_lowpoly_base.tik
  1103.             local.get_out = 0
  1104.             local.do_collision = 0
  1105.             break
  1106.         case panzerwerfer:
  1107.             local.model = models/vehicles/Panzerwerfer_d_base.tik
  1108.             local.turretmodel = models/vehicles/Panzerwerfer_d_cannon.tik
  1109.             local.get_out = 0
  1110.             break;
  1111.         case empty_panzer_winter:
  1112.             local.model = models/vehicles/PanzerIV_w_d_base.tik
  1113.             local.turretmodel = models/vehicles/PanzerIV_w_d_cannon.tik
  1114.             local.get_out = 0
  1115.             break;
  1116.         case empty_panzer_lowpoly:
  1117.             local.model = models/vehicles/panzer_destroyed_lowpoly_base.tik
  1118.             local.turretmodel = models/vehicles/panzer_destroyed_lowpoly_cannon.tik
  1119.             local.get_out = 0
  1120. //            local.do_collision = 0
  1121.             break;
  1122.         case empty_t34:
  1123.             local.model = models/vehicles/t34_base_d.tik
  1124.             local.turretmodel = models/vehicles/t34_cannon_d.tik
  1125.             local.get_out = 0
  1126. //            local.do_collision = 0
  1127.             break;
  1128.         case berlin_panzer:
  1129.             local.model = models/vehicles/panzer_destroyed_lowpoly_base.tik
  1130.             local.turretmodel = models/vehicles/panzer_destroyed_lowpoly_cannon.tik
  1131.             local.get_out = 1
  1132.             local.anims[0] = tank_exit_1
  1133.             local.anims[1] = tank_exit_2
  1134.             local.anims[2] = tank_exit_3
  1135.             local.anims[3] = tank_exit_4
  1136.             break
  1137.         default:
  1138.             local.model = models/vehicles/tigertank_destroyed_base.tik
  1139.             local.turretmodel = models/vehicles/tigertank_destroyed_cannon.tik
  1140.             local.get_out = 1
  1141.             local.anims[0] = tank_exit_1
  1142.             local.anims[1] = tank_exit_2
  1143.             local.anims[2] = tank_exit_3
  1144.             local.anims[3] = tank_exit_4
  1145.             break
  1146.     }
  1147.     self thread spawn_fx models/emitters/explosion_tank.tik
  1148.     wait 0.25
  1149.     exec global/earthquake.scr .2 4 0 0
  1150.     //radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius
  1151.     radiusdamage (self.origin + (0 0 200)) 800 400
  1152.     wait .1   //wait for explosion fx to cover up the model swap
  1153.     self.gun = self QueryTurretSlotEntity 0
  1154.     self.gun2 = self QueryTurretSlotEntity 1
  1155.     if (self.gun)
  1156.     {
  1157.         local.turretangles = self.gun.angles
  1158.         self DetachTurretSlot 0
  1159.         self.gun remove
  1160.     }
  1161.     if (self.gun2)
  1162.     {
  1163.         self DetachTurretSlot 1
  1164.         self.gun2 remove
  1165.     }
  1166.     local.name = self
  1167.     local.angles = self.angles
  1168.     local.origin = self.origin
  1169.     local.brushmodel = self.collisionent.brushmodel
  1170.     local.targetname = self.targetname
  1171.  
  1172.     //stop the smoke emitter that came from damage and start a temp emitter for the death model
  1173.     
  1174.     if (self.smoke)
  1175.     {
  1176.         self.smoke anim stop
  1177.         self.smoke = NIL
  1178.     }
  1179.  
  1180.     self remove
  1181.  
  1182.     if ( local.do_collision==1 )
  1183.     {
  1184.         local.collision = thread damaged_collision local.angles local.origin local.brushmodel
  1185.     }
  1186.  
  1187.     local.damaged = thread spawn_damaged_new local.model local.angles local.origin
  1188.     local.damaged.targetname = local.targetname
  1189. //dprintln ( "model " + local.model )
  1190.     local.damaged.smoke    = local.smoke
  1191.  
  1192.     //produce temporary smoke and burning sound
  1193.     local.damaged anim temp_smoke
  1194.     local.damaged anim temp_sizzle
  1195.  
  1196.     if ( local.turretmodel != NIL )
  1197.     {
  1198.         local.turretname = local.targetname + "_damaged_turret"
  1199.         local.damaged attachmodel local.turretmodel "turret0" 1 local.turretname
  1200.         local.turretname detach
  1201.         local.turretname.angles = local.turretangles
  1202.     }
  1203.     
  1204.     local.collision disconnect_paths
  1205.  
  1206.     //Do not add this back in.
  1207.     //if (local.get_out == 1)
  1208.         //local.damaged thread tank_guys_get_out local.anims local.name
  1209. end
  1210.  
  1211.  
  1212.  
  1213. tank_guys_get_out local.anims local.name local.type local.angles local.turretname:
  1214.     wait 3
  1215.  
  1216.     if (self.state != "open")
  1217.     {
  1218.         if(local.turretname)
  1219.             local.turretname anim open
  1220.         else
  1221.             self anim open
  1222.         self playsound tank_snd_dooropen
  1223.     }
  1224.     
  1225.     wait 1
  1226.     //self waittill animdone
  1227.     if (self.state != "open")
  1228.     {
  1229.         if(local.turretname)
  1230.             local.turretname anim open_idle
  1231.         else
  1232.             self anim open_idle
  1233.     
  1234.         self.state = "open"
  1235.     }
  1236.  
  1237.     //insert roberts random sorter here
  1238.     exec global/randomorder.scr local.anims
  1239.  
  1240.     for (local.i = 0; local.i < 4; local.i ++)
  1241.     {
  1242.         if ((randomint 100) <= 70)
  1243.         {
  1244.             if (local.anims[local.i]) 
  1245.             {
  1246.                 waitthread tank_guy_spawn local.anims[local.i] local.name local.type local.angles
  1247.             }
  1248.         }
  1249.     }
  1250. end
  1251.  
  1252. tank_guy_spawn local.anim local.name local.type local.angles:
  1253.     println "z:       spawning guy to get out " local.anim
  1254.  
  1255.     switch ( local.type )
  1256.     {
  1257.         case    panzer_winter:
  1258.             local.model_type = human/german_winter_Artillery-Crew
  1259.         break;
  1260.  
  1261.         default:
  1262.         local.temp = randomint 3
  1263.         if (local.temp == 0)
  1264.             local.model_type = human/german_panzer_grenadier
  1265.         if (local.temp == 1)
  1266.             local.model_type = human/german_panzer_obershutze
  1267.         if (local.temp == 2)
  1268.             local.model_type = human/german_panzer_tankcommander
  1269.         break;
  1270.     }
  1271.  
  1272.     local.ent = spawn local.model_type
  1273.     local.ent.origin = self gettagposition "tag_start"
  1274.  
  1275.     if ( local.angles!=NIL )
  1276.         local.ent.angles = local.angles
  1277.     else
  1278.         local.ent.angles = self gettagangles "tag_start"
  1279.  
  1280.     local.ent noticescale 1
  1281.     local.ent sight 4500
  1282.     local.ent mindist 2024
  1283.     local.ent maxdist 2448
  1284.     local.ent leash 10000
  1285.  
  1286.     if (level.dontdropweapons == 1)
  1287.         local.ent dontdropweapons
  1288.     
  1289.     local.ent exec global/disable_ai.scr
  1290.     local.ent notsolid
  1291.  
  1292.     println "z:         starting anim: " local.name " " local.anim
  1293.     local.ent anim_noclip local.anim
  1294.     local.ent waittill animdone
  1295.     println "z:         ending   anim: " local.name " " local.anim
  1296.  
  1297.     if ( (local.anim == "tank_exit_2") || (local.anim == "panzer_exit_2") )
  1298.         local.ent.position = "crawl"
  1299.     if ( (local.anim == "tank_exit_3") || (local.anim == "panzer_exit_3") )
  1300.         local.ent.health = 45 
  1301.     if (local.anim == "tank_exit_4")
  1302.     {
  1303.         local.ent bedead
  1304.         end
  1305.     }
  1306.  
  1307.     wait .4
  1308.     println "z:         making solid: " local.name " " local.anim
  1309.  
  1310.     local.ent solid
  1311.  
  1312. //        wait 3
  1313.     println "z:         enabling AI: " local.name " " local.anim
  1314.  
  1315.     local.ent exec global/enable_ai.scr
  1316.     local.ent attackplayer
  1317. end
  1318.  
  1319.  
  1320. tank_pain local.gun local.relock_on_player:
  1321.     local.previoushealth = self.health
  1322.     local.timer = 0
  1323.     self immune bash
  1324.  
  1325.     if ( local.relock_on_player==NIL )
  1326.         local.relock_on_player    = 1
  1327.  
  1328.     while(isAlive self)
  1329.     {
  1330.         wait .1
  1331.         if ( (isAlive self) && (self.health < local.previoushealth) )
  1332.         {
  1333.             println "z:         " self " is damaged. self.start_health: " self.start_health
  1334.             println "z:         current health: " self.health
  1335.             println "z:         previous health: " local.previoushealth
  1336.             println "z:         " self " is stunned"
  1337.  
  1338.             self playsound damage_tank
  1339.             self.stunned = 1
  1340.             local.gun setAimTarget NULL
  1341.  
  1342.             if (self.driving == 1)
  1343.                 self modifydrive 5 100 256
  1344.             if (self.driving_reverse == 1)
  1345.                 self modifydrive -5 100 256
  1346.  
  1347.         //    self.smoke = spawn script_model model "models/emitters/linger_smoke.tik"
  1348.  
  1349.             if ( self.smoke==NIL )
  1350.             {
  1351.                 self.smoke = spawn "models/emitters/linger_smoke.tik"
  1352.                 self.smoke notsolid
  1353.                 self.smoke anim start
  1354.                 self.smoke.origin = (self.origin + (0 0 80))
  1355.                 self.smoke glue self
  1356.             }
  1357.             local.previoushealth = self.health
  1358.             local.timer = 0
  1359.         }
  1360.  
  1361.         if (local.timer == level.tank_stunned_time)
  1362.         {
  1363.             if ( local.relock_on_player==1 )
  1364.                 local.gun setAimTarget level.playertanktarget
  1365.  
  1366.             if (self.driving == 1)
  1367.                 self modifydrive level.enemytankspeed 30 256
  1368.             if (self.driving_reverse == 1)
  1369.                 self modifydrive level.enemytankspeed_reverse 30 256
  1370.             self.stunned = 0
  1371.             println "z:         " self " is no longer stunned"
  1372.         }
  1373.         local.timer++
  1374.     }
  1375. end
  1376.  
  1377. enemy_tank_attack_loop local.gun:    //self is the tank
  1378.  
  1379.     if ( self.paused==NIL )
  1380.         self.paused = 0
  1381.  
  1382.     local.waited = 0
  1383.  
  1384.     while (IsAlive self)
  1385.     {
  1386.         // get our gun on target 1st...
  1387.         local.gun waittill ontarget
  1388.         if ( self.paused==0 )
  1389.         {
  1390.             local.gun waittill ontarget
  1391.             wait 0.25    // center on target for just a little..
  1392.  
  1393.             local.trace_offset = local.gun.origin + (0 0 48)
  1394.             if (self.stunned == 1)
  1395.             {
  1396.                 //println "z:             " self " is not firing because stunned"
  1397.                 wait 1
  1398.                 local.waited = 1
  1399.             }
  1400.             else if !(vector_within level.playertanktarget.centroid local.trace_offset level.sightdistance)
  1401.             {        
  1402.                 //println "z:             " self " is not firing because range"
  1403.                 wait 1
  1404.                 local.waited = 1
  1405.             }
  1406.             else if (!(sighttrace level.playertanktarget.centroid local.trace_offset 1))
  1407.             {
  1408.                 //println "z:             " self " is not firing because sight trace"
  1409.                 wait 1
  1410.                 local.waited = 1
  1411.             }
  1412.             else
  1413.             {
  1414.                 //println "z:         " self " on target, firing!"
  1415.                 // wait 3
  1416.  
  1417.                 if ( local.waited==0 )
  1418.                 {
  1419.                     wait 2
  1420.                     local.waited = 1
  1421.                 }
  1422.  
  1423.                 if (self.stunned != 1)
  1424.                     local.gun anim fire
  1425.  
  1426.                 wait 5
  1427.             }
  1428.         }
  1429.         else
  1430.         {
  1431.             wait 1
  1432.         }
  1433.     }
  1434. end
  1435.  
  1436.  
  1437. //local.collision = thread damaged_collision local.angles local.origin local.brushmodel
  1438. //local.damaged = thread spawn_damaged_new local.model local.angles local.origin
  1439. //----------------------------------
  1440. spawn_damaged local.model:
  1441.     local.damaged = spawn script_model model local.model
  1442.     local.damaged.origin = self.origin
  1443.     local.damaged.angles = self.angles
  1444.     local.damaged notsolid
  1445. end local.damaged
  1446.  
  1447. spawn_damaged_new local.model local.angles local.origin:
  1448.     local.damaged = spawn script_model model local.model
  1449.     local.damaged.origin = local.origin
  1450.     local.damaged.angles = local.angles
  1451. end local.damaged
  1452.  
  1453. spawn_fx local.fx:
  1454.     local.temp = spawn script_model model local.fx
  1455.     local.temp notsolid
  1456.     local.temp.origin = self.origin
  1457.     local.temp anim start
  1458.     local.temp notsolid
  1459.     wait 5
  1460.     local.temp remove
  1461. end
  1462.  
  1463. damaged_collision local.angles local.origin local.brushmodel:
  1464.     local.collision = spawn script_object model local.brushmodel
  1465.     local.collision.origin = local.origin
  1466.     local.collision.angles = local.angles
  1467.     local.collision safesolid
  1468. end local.collision